﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using Libreria.DAL;

namespace Libreria.SICOM.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer, "EQUIPO_DE_MEDICION")]
    public class EquipodeMedicion
    {

        // Atributo de abstracción
        public MOR accesoADatos;
        private Int32? identificador;
        private String nombre;
        private Boolean? automatico;
        private Boolean? manual;
        private String responsable;


        //Constructor de la clase
        public EquipodeMedicion()
        {
        }

        public EquipodeMedicion(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

        //Encapsulamiento y mapeo de atributos
        [Tipo(Tipo.TiposSQLServer._int, "EQUI_ID", true, false)]
        [Required(ErrorMessage = " *** Campo Identificador obligatorio***")]
        public Int32? Identificador
        {
            get { return identificador; }
            set { identificador = value; }
        }
        [Tipo(Tipo.TiposSQLServer._varchar, "EQUI_NOMBRE")]
        [Required(ErrorMessage = " *** Campo Nombre obligatorio***")]
        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        [Tipo(Tipo.TiposSQLServer._bit, "EQUI_AUTOMATICO")]
        
        public Boolean? Automatico
        {
            get { return automatico; }
            set { automatico = value; }
        }
        [Tipo(Tipo.TiposSQLServer._bit, "EQUI_MANUAL")]
        public Boolean? Manual
        {
            get { return manual; }
            set { manual = value; }
        }
        [Tipo(Tipo.TiposSQLServer._varchar, "EQUI_RESPONSABLE")]
        [Required(ErrorMessage = " *** Campo Responsable obligatorio***")]
        public String Responsable
        {
            get { return responsable; }
            set { responsable = value; }
        }

        // Métodos de abstracción de datos
        public void crear()
        {
            this.accesoADatos.crearRegistro(this);
        }

        public List<EquipodeMedicion> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<EquipodeMedicion> resultado = new List<EquipodeMedicion>();
            foreach (Object registro in registros)
            {
                resultado.Add((EquipodeMedicion)registro);
            }
            return resultado;
        }

        public EquipodeMedicion consultarPorIdentificador(Int32? identificador)
        {
            this.identificador = identificador;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            EquipodeMedicion resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (EquipodeMedicion)registros[0];
                }
            }
            return resultado;
        }

        public void actualizar()
        {
            this.accesoADatos.actualizarRegistro(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }
    }
}

